AWS ParallelCluster で Apptainer を利用して Trinity を実行してみた
RNA-Seq データのアセンブルで有名な Trinity を AWS ParallelCluster 上で Apptainer を用いて Trinity コンテナを実行する方法を紹介します。
Trinity コンテナイメージはどちらを使うか
Trinity のセットアップは、公式に提供されているコンテナイメージを利用して手間取る環境構築を省略する方針とします。 現在、Trinity のコンテナイメージは OCI 形式と SIF 形式 の 2 種類提供されています。
- OCI 形式はコンテナ技術の標準化を目指す Open Container Initiative (OCI) が定義したコンテナイメージのファイル形式です。
- SIF 形式 (Singularity Image Format): Apptainer (旧 Singularity) で使用されるコンテナイメージのファイル形式です。
Trinity では SIF 形式が推奨されているようです。
Singularity is easier and safer to use than Docker, and is our preferred method for running Trinity. Trinity in Docker · trinityrnaseq/trinityrnaseq Wiki
Appitainer は OCI 形式のイメージを SIF 形式に変換して実行できるため、Docker Hub からイメージを取得しても Apptainer で実行可能です。ですが、実行の都度コンテナイメージの変換に多少なりともオーバヘッドが発生します。今回は SIF 形式のイメージを利用します。コンテナイメージは Broad Institute の Web サイトで公開されています。
Apptainer の実行環境構築
Apptainer on ParallelCluster の環境構築は以下の記事を参照ください。
Trinity を実行してみる
コンピューティング環境は Appitainer on ParallelCluster を利用して、Trinity コンテナを実行します。
準備
コンピュートノード上で Trinity コンテナを実行するにあたり、もろもろの検証を兼ねて以下の構成を用意します。
Trinity イメージのダウンロード
Appitainer のイメージはローカルに保存可能なファイル(拡張子は.simg
)です。公式のリポジトリからダウンロードしてきたイメージファイルを EFS に保存しました。EFS はコンピュートノードにマウントする設定としているため、コンピュートノードからも読み書きが可能です。
/mnt/efs
ディレクトリは ParallelCluster にマウントしてある EFS です。
wget -P /mnt/efs/image/ https://data.broadinstitute.org/Trinity/TRINITY_SINGULARITY/trinityrnaseq.v2.15.1.simg
サンプルのリードファイルのダウンロード
Trinity の実行用のテストファイルをダウンロードし、ヘッドノードの EBS に保存しました。ヘッドノードのローカルディスクはコンピュートノードに自動マウントされるため、コンピュートノードからも読み書き可能です。
wget -P ~/work/ https://github.com/trinityrnaseq/trinityrnaseq/raw/master/Docker/test_data/reads.left.fq.gz wget -P ~/work/ https://github.com/trinityrnaseq/trinityrnaseq/raw/master/Docker/test_data/reads.right.fq.gz
コンピュートノードの確認
私の検証環境では Apptainer の実行環境をセットアップする設定が入っているのはpartition2
です。Trinity の実行はこちらのパーティションを利用して、コンピュートノードを起動します。
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST test1* up infinite 20 idle~ test1-dy-test1-[1-20] queue1 up infinite 10 idle~ queue1-dy-queue1-[1-10] partiton2 up infinite 10 idle~ partiton2-dy-p2-[1-10]
Trinity 実行
Trinity を実行するために、以下のようなスクリプト trinity.sh を作成しました。このスクリプトでは、EFS に保存した Trinity のコンテナイメージを指定し、ヘッドノードのホームディレクトリに配置したサンプルのリードファイルを入力として使用します。また、出力結果の保存先はコンピュートノードのホームディレクトリ配下を指定しています。
#! /bin/bash #SBATCH -p partiton2 #SBATCH -N 1 MOUNT_PATH="/mnt" IMAGE_PATH="/mnt/efs/images" apptainer exec --bind ${MOUNT_PATH}:/mnt \ -e ${IMAGE_PATH}/trinityrnaseq.v2.15.1.simg Trinity \ --seqType fq \ --left $HOME/work/reads.left.fq.gz \ --right $HOME/work/reads.right.fq.gz \ --NO_SEQTK \ --max_memory 12G --CPU 2 \ --output $HOME/work/result_trinity/$(date +"%Y%m%d")/trinity_out_dir
このスクリプトをジョブとしてサブミットすることで、Trinity の解析処理が開始されます。
$ sbatch trinity.sh
コンピュートノードが起動し、スクリプトが実行されると標準出力をモニタリングしていると進行状況を確認できます。ジョブの出力結果関連のオプションは未指定でジョブをサブミットしたため、ヘッドノードのホームディレクトリに.out
のファイルが保存されたファイルを開きました。
______ ____ ____ ____ ____ ______ __ __ | || \ | || \ | || || | | | || D ) | | | _ | | | | || | | |_| |_|| / | | | | | | | |_| |_|| ~ | | | | \ | | | | | | | | | |___, | | | | . \ | | | | | | | | | | | |__| |__|\_||____||__|__||____| |__| |____/ Trinity-v2.15.1 Left read files: $VAR1 = [ '/home/ubuntu/work/reads.left.fq.gz' ]; Right read files: $VAR1 = [ '/home/ubuntu/work/reads.right.fq.gz' ]; Trinity version: Trinity-v2.15.1 -currently using the latest production release of Trinity. Monday, April 15, 2024: 09:53:21 CMD: java -Xmx64m -XX:ParallelGCThreads=2 -jar /usr/local/bin/util/support_scripts/ExitTester.jar 0 Monday, April 15, 2024: 09:53:21 CMD: java -Xmx4g -XX:ParallelGCThreads=2 -jar /usr/local/bin/util/support_scripts/ExitTester.jar 1 Monday, April 15, 2024: 09:53:21 CMD: mkdir -p /home/ubuntu/work/result_trinity/20240415/trinity_out_dir Monday, April 15, 2024: 09:53:21 CMD: mkdir -p /home/ubuntu/work/result_trinity/20240415/trinity_out_dir/chrysalis ---------------------------------------------------------------------------------- -------------- Trinity Phase 1: Clustering of RNA-Seq Reads --------------------- ---------------------------------------------------------------------------------- --------------------------------------------------------------- ------------ In silico Read Normalization --------------------- -- (Removing Excess Reads Beyond 200 Coverage -- --------------------------------------------------------------- # running normalization on reads: $VAR1 = [ [ '/home/ubuntu/work/reads.left.fq.gz' ], [ '/home/ubuntu/work/reads.right.fq.gz' ] ]; --- 省略 ---
3 分ほどで問題なく完了しました。
--- 省略 --- succeeded(39) 100% completed. All commands completed successfully. :-) ** Harvesting all assembled transcripts into a single multi-fasta file... Monday, April 15, 2024: 09:55:22 CMD: find /home/ubuntu/work/result_trinity/20240415/trinity_out_dir/read_partitions/ -name '*inity.fasta' | /usr/local/bin/util/support_scripts/partitioned_trinity_aggregator.pl --token_prefix TRINITY_DN --output_prefix /home/ubuntu/work/result_trinity/20240415/trinity_out_dir/Trinity.tmp * [Mon Apr 15 09:55:23 2024] Running CMD: /usr/local/bin/util/support_scripts/salmon_runner.pl Trinity.tmp.fasta /home/ubuntu/work/result_trinity/20240415/trinity_out_dir/both.fa 2 * [Mon Apr 15 09:55:26 2024] Running CMD: /usr/local/bin/util/support_scripts/filter_transcripts_require_min_cov.pl Trinity.tmp.fasta /home/ubuntu/work/result_trinity/20240415/trinity_out_dir/both.fa salmon_outdir/quant.sf 2 > /home/ubuntu/work/result_trinity/20240415/trinity_out_dir.Trinity.fasta Monday, April 15, 2024: 09:55:26 CMD: /usr/local/bin/util/support_scripts/get_Trinity_gene_to_trans_map.pl /home/ubuntu/work/result_trinity/20240415/trinity_out_dir.Trinity.fasta > /home/ubuntu/work/result_trinity/20240415/trinity_out_dir.Trinity.fasta.gene_trans_map ############################################################################# Finished. Final Trinity assemblies are written to /home/ubuntu/work/result_trinity/20240415/trinity_out_dir.Trinity.fasta #############################################################################
Trinity の実行結果を確認してみる
Trinity の実行結果はコンピュートノードのホームディレクトリに保存する指定をしていました。ヘッドノードのホームディレクトリを確認すると、Trinity の実行結果を確認できます。--output
オプションの指定が適当故に生成された FASTA ファイルの名前がイマイチになりました。
ubuntu@ip-10-0-1-235:~/work/result_trinity/20240415$ pwd /home/ubuntu/work/result_trinity/20240415 ubuntu@ip-10-0-1-235:~/work/result_trinity/20240415$ ll total 172 drwxrwxr-x 3 ubuntu ubuntu 4096 Apr 15 09:55 ./ drwxrwxr-x 4 ubuntu ubuntu 4096 Apr 15 09:53 ../ drwxrwxr-x 8 ubuntu ubuntu 4096 Apr 15 09:55 trinity_out_dir/ -rw-rw-r-- 1 ubuntu ubuntu 155786 Apr 15 09:55 trinity_out_dir.Trinity.fasta -rw-rw-r-- 1 ubuntu ubuntu 3028 Apr 15 09:55 trinity_out_dir.Trinity.fasta.gene_trans_map
コンピュートノード上の Apptainer で Trinity コンテナは問題なく実行できました。
ubuntu@ip-10-0-1-235:~/work/result_trinity/20240415$ ll trinity_out_dir total 40548 drwxrwxr-x 8 ubuntu ubuntu 4096 Apr 15 09:55 ./ drwxrwxr-x 3 ubuntu ubuntu 4096 Apr 15 09:55 ../ -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 .iworm.25.asm.ok -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 .iworm_renamed.25.asm.ok -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 .jellyfish_count.25.mincov1.asm.ok -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 .jellyfish_dump.25.mincov1.asm.ok -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 .jellyfish_histo.25.mincov1.asm.ok -rw-rw-r-- 1 ubuntu ubuntu 764 Apr 15 09:55 Trinity.timing -rw-rw-r-- 1 ubuntu ubuntu 193846 Apr 15 09:55 Trinity.tmp.fasta drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 15 09:55 Trinity.tmp.fasta.salmon.idx/ drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 15 09:55 __salmon_filt.chkpts/ -rw-rw-r-- 1 ubuntu ubuntu 6838210 Apr 15 09:53 both.fa -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 both.fa.ok -rw-rw-r-- 1 ubuntu ubuntu 6 Apr 15 09:53 both.fa.read_count drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 15 09:53 chrysalis/ -rw-rw-r-- 1 ubuntu ubuntu 215730 Apr 15 09:53 inchworm.DS.fa -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 inchworm.DS.fa.finished -rw-rw-r-- 1 ubuntu ubuntu 7 Apr 15 09:53 inchworm.kmer_count drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 15 09:53 insilico_read_normalization/ -rw-rw-r-- 1 ubuntu ubuntu 15075968 Apr 15 09:53 jellyfish.kmers.25.asm.fa -rw-rw-r-- 1 ubuntu ubuntu 1891 Apr 15 09:53 jellyfish.kmers.25.asm.fa.histo -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 left.fa.ok -rw-rw-r-- 1 ubuntu ubuntu 4163 Apr 15 09:53 partitioned_reads.files.list -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 partitioned_reads.files.list.ok -rw-rw-r-- 1 ubuntu ubuntu 396 Apr 15 09:55 pipeliner.24593.cmds drwxrwxr-x 3 ubuntu ubuntu 4096 Apr 15 09:53 read_partitions/ -rw-rw-r-- 1 ubuntu ubuntu 15658 Apr 15 09:53 recursive_trinity.cmds -rw-rw-r-- 1 ubuntu ubuntu 15658 Apr 15 09:55 recursive_trinity.cmds.completed -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 recursive_trinity.cmds.ok -rw-rw-r-- 1 ubuntu ubuntu 0 Apr 15 09:53 right.fa.ok drwxrwxr-x 5 ubuntu ubuntu 4096 Apr 15 09:55 salmon_outdir/ -rw-rw-r-- 1 ubuntu ubuntu 19094847 Apr 15 09:53 scaffolding_entries.sam
おわりに
Apptainer on ParallelCluster で Trinity 実行を確認しました。 今回は実行確認ということもあり、無難にオンプレスパコンとそう変わりない構成でした。次回はクラウドネイティブな構成でよりクラウドの恩恵を得られる構成を検討してみます。 SIF 形式のイメージの保存先は S3 にし、Moutpoint for Amazon S3 でコンピュートノードにマウントして実行可能かなどを検証する予定です。